﻿Public Class ViewModelParametrerNouveauGroupe
    Inherits ViewModelTabSectionBase

    Friend _ListeGroupesArtificiels As ObjectModel.ObservableCollection(Of String)
    Private _ListeNouveauGroupe As DataView
    Private _GroupeArtificielActif As String
    Private _ListeGroupeActif As DataView
    Private _GroupeArtificielActifGaranties As ObjectModel.ObservableCollection(Of String)

    Public ReadOnly Property ListeNouveauGroupe As DataView
        Get
            If _ListeNouveauGroupe Is Nothing Then
                Dim datamanager As New DataManager()
                _ListeNouveauGroupe = New DataView(datamanager.Dataset.NouveauGroupe)
            End If
            Return _ListeNouveauGroupe
        End Get
    End Property

    Public ReadOnly Property ListeGroupeActif As DataView
        Get
            If _ListeGroupeActif Is Nothing Then
                Dim datamanager As New DataManager
                _ListeGroupeActif = New DataView(datamanager.Dataset.NouveauGroupe)
            End If
            Return _ListeGroupeActif
        End Get
    End Property

    Public ReadOnly Property ListeGroupesArtificiels As ObjectModel.ObservableCollection(Of String)
        Get
            Dim datamanager As New DataManager

            Dim q = From elt In datamanager.Dataset.CorrespondanceCrtPmt
                    Where Not String.IsNullOrEmpty(elt.Groupe)
                    Select elt.Groupe Distinct

            Dim q2 = From elt In datamanager.Dataset.NouveauGroupe Select elt.Groupe Distinct

            Dim q3 = q2.Except(q)

            _ListeGroupesArtificiels = New ObjectModel.ObservableCollection(Of String)(q3)

            Return _ListeGroupesArtificiels
        End Get
    End Property

    Public Property GroupeArtificielActif As String
        Get
            Return _GroupeArtificielActif
        End Get
        Set(value As String)
            _GroupeArtificielActif = value
            _ListeGroupeActif.RowFilter = "Groupe='" & _GroupeArtificielActif & "'"
            OnPropertyChanged("GroupeArtificielActif")
            OnPropertyChanged("GroupeArtificielActifGarantieDC")
            OnPropertyChanged("GroupeArtificielActifGarantieIT")
            OnPropertyChanged("GroupeArtificielActifGarantiePE")
            OnPropertyChanged("GroupeArtificielActifNotionGeneration")
            OnPropertyChanged("GroupeArtificielActifAnneeReference")
        End Set
    End Property

    Public Property GroupeArtificielActifNotionGeneration As Boolean
        Get
            If String.IsNullOrEmpty(GroupeArtificielActif) Then Return False

            Dim datamanager As New DataManager
            Dim q = (From elt In datamanager.Dataset.NouveauGroupe
                     Where elt.Groupe = GroupeArtificielActif
                     Select elt).FirstOrDefault()

            If q Is Nothing Then Return False
            Return q.Avec_Generation = 1.0
        End Get
        Set(value As Boolean)
            If String.IsNullOrEmpty(GroupeArtificielActif) Then Return

            Dim datamanager As New DataManager
            Dim q = From elt In datamanager.Dataset.NouveauGroupe
                    Where elt.Groupe = GroupeArtificielActif
                    Select elt
            For Each elt In q
                elt.Avec_Generation = If(value, 1.0, 0.0)
            Next
        End Set
    End Property

    Public Property GroupeArtificielActifAnneeReference As Double
        Get
            If String.IsNullOrEmpty(GroupeArtificielActif) Then Return False

            Dim datamanager As New DataManager
            Dim q = (From elt In datamanager.Dataset.NouveauGroupe
                     Where elt.Groupe = GroupeArtificielActif
                     Select elt).FirstOrDefault()

            If q Is Nothing Then Return False
            Return q.Annee_Reference
        End Get
        Set(value As Double)
            If String.IsNullOrEmpty(GroupeArtificielActif) Then Return

            Dim datamanager As New DataManager
            Dim q = From elt In datamanager.Dataset.NouveauGroupe
                    Where elt.Groupe = GroupeArtificielActif
                    Select elt
            For Each elt In q
                elt.Annee_Reference = value
            Next
        End Set
    End Property

    Public Property GroupeArtificielActifGarantieDC As Boolean
        Get
            If String.IsNullOrEmpty(GroupeArtificielActif) Then Return False
            Return GroupeAGarantie(GroupeArtificielActif, "DC")
        End Get
        Set(value As Boolean)
            MettreAJourGarantie(value, "DC")
        End Set
    End Property

    Public Property GroupeArtificielActifGarantieIT As Boolean
        Get
            If String.IsNullOrEmpty(GroupeArtificielActif) Then Return False
            Return GroupeAGarantie(GroupeArtificielActif, "IT")
        End Get
        Set(value As Boolean)
            MettreAJourGarantie(value, "IT")
        End Set
    End Property

    Public Property GroupeArtificielActifGarantiePE As Boolean
        Get
            If String.IsNullOrEmpty(GroupeArtificielActif) Then Return False
            Return GroupeAGarantie(GroupeArtificielActif, "PE")
        End Get
        Set(value As Boolean)
            MettreAJourGarantie(value, "PE")
        End Set
    End Property

    Private Function GroupeAGarantie(groupe As String, garantie As String) As Boolean
        Dim datamanager As New DataManager
        Return (Aggregate elt In datamanager.Dataset.NouveauGroupe
                Where elt.Groupe = groupe And elt.Code_Garantie = garantie
                Into Count()) > 0
    End Function

    Private Sub MettreAJourGarantie(mode As Boolean, garantie As String)
        If String.IsNullOrEmpty(GroupeArtificielActif) Then Return
        Dim datamanager As New DataManager

        Dim q0 = (From elt In datamanager.Dataset.NouveauGroupe
                 Where elt.Groupe = GroupeArtificielActif
                 Select elt).ToList()

        Dim q = (From elt In datamanager.Dataset.NouveauGroupe
                 Where elt.Groupe = GroupeArtificielActif And elt.Code_Garantie = garantie
                 Select elt).FirstOrDefault()

        If (q IsNot Nothing) And (Not mode) Then
            datamanager.Dataset.NouveauGroupe.RemoveNouveauGroupeRow(q)
        End If

        If (q Is Nothing) And (mode) Then
            datamanager.Dataset.NouveauGroupe.AddNouveauGroupeRow( _
                GroupeArtificielActif, _
                garantie,
                If(q0.Count > 0, q0(0).Annee_Reference, datamanager.AnneeReference + 1), _
                If(q0.Count > 0, q0(0).Avec_Generation, 1))
        End If
    End Sub
End Class
